package Creating_Observables

import (
	"context"
	"fmt"
	"github.com/reactivex/rxgo/v2"
)

// https://github.com/ReactiveX/RxGo/blob/master/doc/create.md

// 通过以编程方式从呼叫观察者调用观察者方法创建可观察者。
func Demo_Create() {
	// 定义一个生产者 函数
	var f1 rxgo.Producer
	// 构建
	f1 = func(ctx context.Context, next chan<- rxgo.Item) {
		// 定义一个item结构
		var it1 rxgo.Item
		// 根据一个值产生 v=1
		it1 = rxgo.Of(1)
		// 吧item 放入 只写管道 chan<-
		next <- it1
		next <- rxgo.Of(2)
		next <- rxgo.Of(3)
	}
	// 放入生产函数组
	ps := []rxgo.Producer{f1}
	// 创建一个新的可观察者
	observable := rxgo.Create(ps)

	// 订阅 1
	for item := range observable.Observe() {
		if item.Error() {
			fmt.Println(item.E)
		}
		fmt.Println(item.V)
	}
	// 订阅 2
	for item := range observable.Observe() {
		if item.Error() {
			fmt.Println(item.E)
		}
		fmt.Println(item.V)
	}
}
